home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 5 / Apprentice-Release5.iso / Source Code / C / Applications / Python 1.3.3 / Python 133 68K / Lib / test / img / NOTYET / imgpict.py < prev   
Text File  |  1996-05-20  |  3KB  |  103 lines

  1. #
  2. # Macintosh PICT format reader/writer module
  3. #
  4. # Jack Jansen, CWI, 1995
  5. #
  6. import struct
  7. import imgformat
  8.  
  9. error = 'imgpict.error'
  10.  
  11. class reader:
  12.     def __init__(self, filename):
  13.     self._filename = filename
  14.     self.width = 0
  15.     self.height = 0
  16.     raise error, 'Reading PICT files not yet supported'
  17.  
  18.     def args(self):
  19.     return self.__dict__
  20.     
  21.     def read(self):
  22.     return ''
  23.  
  24.     def write(self, data):
  25.     raise error, 'Cannot write() to reader'
  26.  
  27. class writer:
  28.     def __init__(self, filename):
  29.     self._filename = filename
  30.     self.format_choices = (imgformat.rgb, )
  31.     self.format = imgformat.rgb
  32.  
  33.     def args(self):
  34.     return self.__dict__
  35.     
  36.     def _get(self, attr):
  37.     try:
  38.         return getattr(self, attr)
  39.     except AttributeError:
  40.         raise error, "Required attribute '%s' missing"%attr
  41.  
  42.     def read(self):
  43.     raise error, 'Cannot read() from writer'
  44.  
  45.  
  46.     def write(self, data):
  47.     w = self._get('width')
  48.     h = self._get('height')
  49.     fmt = self._get('format')
  50.     if fmt <> imgformat.rgb:
  51.         raise error, 'Only rgb currently supported'
  52.     if w*h*4 != len(data):
  53.         raise error, 'Incorrect datasize'
  54.     # Create the image structure. This is tricky due to possible alignment
  55.     imgstruct = struct.pack('hhhhh', 0x011, 0x02ff, 0x0c00, -2, 0)[:10]
  56.     imgstruct = imgstruct + struct.pack('llhhhh', 0x480000, 0x480000, 0, 0, h, w)
  57.     imgstruct = imgstruct + struct.pack('l', 0)
  58.     imgstruct = imgstruct + struct.pack('h', 0x9a)[:2]
  59.     imgstruct = imgstruct + struct.pack('l', 0xff)
  60.     imgstruct = imgstruct + struct.pack('hhhhhhh', 0x8000|(w*4),
  61.             0, 0, h, w, 0, 1)[:14]
  62.     imgstruct = imgstruct + struct.pack('lll', 0, 0x480000, 0x480000)
  63.     imgstruct = imgstruct + struct.pack('hhhh', 16, 32, 3, 8)
  64. ##    imgstruct = imgstruct + struct.pack('lll', 0, 0, 0)
  65. ##    imgstruct = imgstruct + struct.pack('l', 0x1000000)
  66. ##    imgstruct = imgstruct + struct.pack('hh', 0, 0)
  67. ##    imgstruct = imgstruct + struct.pack('hhhh', -1, 0, 0, 0)
  68.     imgstruct = imgstruct + struct.pack('lll', 0, 0xad892c, 0)  # ????
  69.     imgstruct = imgstruct + struct.pack('hhhh', 0, 0, h, w)
  70.     imgstruct = imgstruct + struct.pack('hhhh', 0, 0, h, w)
  71.     imgstruct = imgstruct + struct.pack('h', 0)[:2]
  72.     
  73.     length = len(imgstruct) + len(data) + 10 + 2
  74.     imghdr = struct.pack('hhhhh', length&0xffff, 0, 0, h, w)[:10]
  75.     imgtrailer = struct.pack('h', 0xff)[:2]
  76.     
  77.     fp = open(self._filename, 'w')
  78.     fp.write('\0'*512)
  79.     fp.write(imghdr)
  80.     fp.write(imgstruct)
  81.     fp.write(data)
  82.     fp.write(imgtrailer)
  83.     fp.close()
  84.     
  85.     try:
  86.         import macfs
  87.         macfs.FSSpec(self._filename).SetCreatorType('????', 'PICT')
  88.     except ImportError:
  89.         # We're probably not running on a mac
  90.         pass
  91.         
  92. def _test():
  93.     import imgppm
  94.     
  95.     r = imgppm.reader('in-rgb-t2b.ppm')
  96.     w = writer('out-mac.pict')
  97.     w.width, w.height = r.width, r.height
  98.     d = r.read()
  99.     w.write(d)
  100.  
  101. if __name__ == '__main__':
  102.     _test()    
  103.